package com.share.iostream;

import java.io.*;
/**
 * 在此输入流中标记当前的位置。对 reset 方法的后续调用会在最后标记的位置重新定位此流，以便后续读取重新读取相同的字节。 
readlimit 参数告知此输入流在标记位置失效之前允许读取许多字节。 

mark 的常规协定是：如果方法 markSupported 返回 true，则输入流总会在调用 mark 之后记住所有读取的字节，
并且无论何时调用方法 reset ，都会准备再次提供那些相同的字节。但是，如果在调用 reset 之前可以从流中读取多于 readlimit 
的字节，则根本不需要该流记住任何数据。 

 * @author Johnny Tam
 *
 */
public class TestBufferStream1 {
	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream(
					"E:\\Coursera-Java\\Eclipse\\workspace\\chapter18-IO\\src\\com\\share\\iostream\\HelloWorld.java");
			BufferedInputStream bis = new BufferedInputStream(fis);

			int c = 0;		
			System.out.println("char p value is: " + (int)('p'));

			System.out.println(bis.read());
			System.out.println(bis.read());
			
			bis.mark(0);//做标记
			
			for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) {
				System.out.print((char) c + " ");// 强制转换意思是字符，不然是数字
			}
			System.out.println();
			
			bis.reset();// 回到前面标记的开始读
			
			for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) {
				System.out.print((char) c + " ");
			}
			bis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}